﻿using Api.Common;
using AutoMapper;

namespace AppManager.Background
{
    public class MapperConfig
    {
        public static void RegisterMapper()
        {
            Mapper.Initialize(cfg =>
            {
                //设置属性转化时忽略大小写
                cfg.SourceMemberNamingConvention=new LowerUnderscoreNamingConvention();
                //设置属性转化时可以使用pascal命名转化 比如MyName->my_name 既忽略大小写也忽略pascal
                cfg.DestinationMemberNamingConvention=new PascalCaseNamingConvention();

                //一定要在CreateMap方法之前，配置替换字符，否则没有效果。这也符合逻辑，只有先添加替换条件，才能按条件映射嘛。
                cfg.ReplaceMemberName("Ä", "A");
                cfg.ReplaceMemberName("í", "i");

                //添加到CreateMap方法之前，否则无效,源类型中有一个前缀为“P”的字段PGender，要想成功映射为Person，就必须识别出前缀“P”
                cfg.RecognizePrefixes("P");
                //默认情况下，AutoMapper识别前缀“Get”,如果你需要清除前缀：
                cfg.ClearPrefixes();

                //不映射任何字段
                cfg.ShouldMapField = fi => false;
                //只映射属性getter是private的属性，但是这样设置会导致public的get属性无法被映射
                //cfg.ShouldMapProperty = pi => pi.GetMethod != null && pi.GetMethod.IsPrivate;
                // 映射具有public或internal的getter的属性
                cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;


                cfg.AddProfile<Sys_MenuProfile>();
                cfg.AddProfile<Sys_UserProfile>();
            });
        }
    }
}